package cn.tedu.Serializable;

import java.io.*;

/*本类用于测试序列化与反序列化
* 序列化:ObjectOutputStream:把java中的对象,保存在磁盘中,相当于对象信息写出保存在文件中
* 反序列化:ObjectInputStream:把之前序列化输出的数据读到内存程序中,相当于把对象读取到程序
* 推荐大家一次序列化操作对应一次反序列化操作
*  */
public class TestSerializable {
    public static void main(String[] args) {
        method1();//用于测试序列化
        method2();//用于测试反序列化
    }
    //本方法用于测试序列化

    private static void method2() {
        ObjectInputStream in= null;
        //try-catch-finally结构
        try{
            //创建反序列化输入流
            in =new ObjectInputStream(new FileInputStream("D:\\ready\\3.txt"));
            Object o = in.readObject();
            System.out.println(o);
            System.out.println("恭喜您,反序列化成功!~");
        }catch(Exception e){
            System.out.println("很抱歉,反序列化失败!~");
            e.printStackTrace();
        }finally{
            try {
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //本方法用于测试反序列化
    /*注意:序列化输出的数据我们是看不懂的
     * 我们需要后期通过反序列化技术把之前输出的数据重新恢复成对象,才能使用*/
    private static void method1() {

        ObjectOutputStream out=null;
        try{
            //创建序列化输出流对象
            out = new ObjectOutputStream(new FileOutputStream("D:\\ready\\3.txt"));
            //指定要序列化输出的对象
            Student obj = new Student("海绵宝宝",3,"海里",'男');
            //将刚刚创建好的学生类对象obj,
            out.writeObject(obj);
            System.out.println("恭喜您,序列化成功");
        }catch (Exception e){
            System.out.println("很抱歉,序列化失败");
            e.printStackTrace();
        }finally {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
